

/*
 * 
 * 通用ajax后台调用函数 param url:ajax 调用的后台响应url param param:ajax 调用后台传递参数(post method)
 * param callbackTarget 调用成功后回调函数目标对象 param callbackFunc 调用成功后执行的回调函数，回调函数接受两个参数
 * 回调函数参数: param callbackTarget: 回调目标对象 param r : json格式数据对象(ajax调用返回的远程数据))
 */
define(["jquery","ajaxServ","msgServ"], function($,ajaxServ,msgServ) {

	'use strict';	
	

	var msgServ = require('msgServ');
	var permissionUrl = '/permission/query/getUserBizOperate.action',bizcode = 'bizcode';
	var btnDefault = {add:'新增',edit:'编辑',del:'删除',save:'保存'};
	
	// 默认参数
	var default_setting = {
		
	};

	var private_method = {
		
		/**
		 * 
		 * @param _options.data 返回的权限对象
		 * @param _options.judgeTxt 用于判断的字段前缀
		 * @param _options.judgeField 用于判断的字段名称
		 * @param _options.btnTxtField 按钮显示内容的字段名称
		 * @param _options.iconField 图标字段名称 
		 * 
		 * @return 生成的html btn 代码
		 */
		generateHtml:function(_options){
			var htmlPre1 = '<a href="javascript:void(0);" class="easyui-linkbutton function-btn" iconCls="'
			var htmlPre2 = '" plain="true" btn-type="'
			var htmlPre3 = '">';
			var htmlSufix= '</a>'
			var html =[]
			var _default={
				judgeField:'fullBizcode',//提取判断信息的字段
				judgeFieldUpcase:'FULLBIZCODE',
				
				btnTxtField:'name',//按钮显示内容的字段名称
				btnTxtFieldUpcase:'NAME',//按钮显示内容的字段名称
				
				iconField:'iconcls',//图标字段名称
				iconFieldUpcase:'ICONCLS',//图标字段名称
				
				judgeTxt:'list',//用于提取按钮的判断字段内容
				judgeTxtUpcase:'LIST',//用于提取按钮的判断字段内容
				
				btnCodeField:'bizCode'//提取业务编码的判断字段内容
			}
			
			$.extend(_default,_options);
			if(_default.data&&(_default.data.length>0)){
				
				
				//generate html btn
				for(var i=0;i<_default.data.length;i++){
					var data = _default.data[i];
					var _fullCode = data[_default.judgeField];
					if(_fullCode==null){
						_fullCode = data[_default.judgeFieldUpcase]
					}
					var perArr = _fullCode.split(':');
					if(perArr&&perArr.length>0){
						var btnLocation = perArr[perArr.length-1]
						
						var _judgeTxt = _default.judgeTxt==null?_default.judgeTxtUpcase:_default.judgeTxt
						if(btnLocation.substring(0,4)===_judgeTxt){
							var iconcls = data[_default.iconField]==null?data[_default.iconFieldUpcase]:data[_default.iconField]
							
							var btnTxt = data[_default.btnTxtField]==null?data[_default.btnTxtFieldUpcase]:data[_default.btnTxtField]
							
							var btnCode = data[_default.btnCodeField]
							if(btnTxt){
								if($.trim(btnTxt).length>0){							
									html.push(htmlPre1 + iconcls + htmlPre2 + btnCode + htmlPre3+btnTxt +htmlSufix)
								}
							}
						}
					}									
				}
				
			}
			return html;
		},
		
		/**
		 * 增加按钮文字定义
		 */
		addBtnDefine:function(){
			
		},
		
		/**
		 * 将生成的btn html append 到容器对象中
		 * @param _options.container	btn容器对象
		 * @param _options.btn	生成的btn html
		 * 
		 * @return 在容器对象中直接append btn组件
		 */
		appendBtn:function(_options){
			
			var btn 
			var _cb = _options.callback!=null?_options.callback:null;
			
			if(_options.btn){
				btn = _options.btn
				
				if(_options.container){
					var td = _options.container
					$(td).empty();
					if(btn){						
						for(var i=0;i<btn.length;i++){
							$(td).append(btn[i])
						}
					}
					
					var _oldParserComplete = $.parser.onComplete;
					
					$.parser.onComplete = function()
					{
						
						if($.isFunction(_cb)){
							_cb(_options);
						}
						
					};
					
					$.parser.parse(td);	
					$.parser.onComplete= _oldParserComplete;
				}
			}
		},
		/**
		 * 
		 * 获取btn 数据
		 * @param _options.rootPath 
		 * @param _options.bizcode
		 * 
		 * @return json格式data
		 */
		getBtnData:function(_options){
			var _permissionUrl;
			if((_options.rootPath)&&(_options.bizcode)){
				_permissionUrl = _options.rootPath + permissionUrl;
				var _param={
					url:_permissionUrl,
					data:{bizcode:_options.bizcode},
					contentType:'form',
					callback:_options.callback						
				}				
				ajaxServ.runAjax(_param);
			}
		}

	};
	var public_method = {
		/**
		 * @param _options.rootPath 
		 * @param _options.bizcode
		 * 
		 * return btn html
		 */
		getBtnHtml:function(_options){
			var _permissionUrl;
			if((_options.rootPath)&&(_options.bizcode)){
				_permissionUrl = _options.rootPath + permissionUrl;
				var _param={
					url:_permissionUrl,
					data:{bizcode:_options.bizcode},
					contentType:'form',
					callback:function(data)
						{							
							_options.data = data;
							_options.callback(private_method.generateHtml(_options))
						}
					}				
				ajaxServ.runAjax(_param);
			}
		},
		
		
		
		/**
		 * 根据后台权限自动生成操作按钮
		 * @param _options.rootPath 	web应用根路径
		 * @param _options.bizcode		业务编码
		 * @param _options.callback		回调函数
		 * @param _options.container	按钮容器对象
		 * 
		 * return void 
		 */
		generateBtn:function(_options){
			
			var _cb = _options.callback!=null?_options.callback:null;
			_options.callback = function(btn){
				
				if(_options.container){
					var td = _options.container
					if(btn){
						for(var i=0;i<btn.length;i++){
							$(td).append(btn[i])
						}
					}				
					
					var _oldParserComplete = $.parser.onComplete;
					
					$.parser.onComplete = function()
						{
							
							if($.isFunction(_cb)){
								_cb(_options);
							}
							
						};
					
					$.parser.parse(td);	
					$.parser.onComplete= _oldParserComplete;
				}
			}
			public_method.getBtnHtml(_options)
		},
		
		/**
		 * 根据后台权限自动生成操作按钮
		 * @param _options.rootPath 	web应用根路径
		 * @param _options.bizcode		业务编码
		 * @param _options.callback		回调函数
		 * @param _options.container	按钮容器对象
		 * @param _options.
		 */
		generateEditBtn:function(_options){
			
			_options.judgeTxt='edit';
			public_method.generateBtn(_options);
		},
		
		/**
		 * 根据后台权限自动生成操作按钮
		 * @param _options.rootPath 	web应用根路径
		 * @param _options.bizcode		业务编码
		 * @param _options.callback		回调函数
		 * @param _options.container	按钮容器对象
		 * 
		 */
		generateListBtn:function(_options){
			
			_options.judgeTxt='list';
			public_method.generateBtn(_options);
		},
		
		/**
		 * 根据后台权限自动生成操作按钮
		 * @param _options.rootPath 	web应用根路径
		 * @param _options.bizcode		业务编码
		 * @param _options.callback		回调函数
		 * @param _options.containers	按钮容器对象
		 * 
		 */
		generateListAndEditBtn:function(_options){
			
			var _cb =_options.callback==null?null:_options.callback
			if(_options.containers){
				var container = _options.containers
				_options.callback = function(data){
					//清除callback，避免死循环
					_options.callback=null
					_options.data = data;
					//生成并append list btn
					_options.judgeTxt='list'
					_options.container=container[0]
					_options.btn = private_method.generateHtml(_options)
					
					private_method.appendBtn(_options);
					
					//生成并append edit btn
					_options.judgeTxt='edit'
					_options.container=container[1]
					_options.btn = private_method.generateHtml(_options)
					private_method.appendBtn(_options);
					if($.isFunction(_cb)){
						_cb();
					}
				}
				private_method.getBtnData(_options)				
			}			
		},
		
		/**
		 * 按钮响应事件
		 * @param _options.buttonEvt 按钮事件
		 * @param _options.buttonConfig 按钮文字及响应事件json配置
		 * @return 执行按钮文字所对应的响应事件
		 * 
		 */
		applyBtnCode:function(_options){
			if(window.console){
				console.info('applyButton on air...')
			}
			if(_options.buttonConfig){
				if(_options.buttonEvt){
					var _state = $(_options.buttonEvt.currentTarget).linkbutton('options')
					if(_state && !_state.disabled){
						//禁用按钮	
						var _el = $(_options.buttonEvt.currentTarget)
						
						_el.linkbutton('disable');
						
						var _btnCode = $(_el).attr('btn-type')
						if(_btnCode){
							_btnCode = $.trim(_btnCode);
						
							var _evt = _options.buttonConfig[_btnCode];
							if(_evt){
								_evt(_options.buttonEvt);
							}
						}
						
					}else{
						msgServ.Msgslide('该操作当前无法执行')
						$(_options.buttonEvt.currentTarget).linkbutton('enable');
					}
				}
			}
		},
		
		/**
		 * 按钮响应事件
		 * @param _options.buttonEvt 按钮事件
		 * @param _options.buttonConfig 按钮文字及响应事件json配置
		 * @return 执行按钮代码所对应的响应事件
		 * 
		 */
		applyButton:function(_options){
			if(window.console){
				console.info('applyButton on air...')
			}
			if(_options.buttonConfig){
				if(_options.buttonEvt){
					var _state = $(_options.buttonEvt.currentTarget).linkbutton('options')
					if(_state && !_state.disabled){
						//禁用按钮					
						$(_options.buttonEvt.currentTarget).linkbutton('disable');
					
						var _btnText = public_method.getButtonText({evt:_options.buttonEvt})
						if(_btnText){
							_btnText = $.trim(_btnText);
						
							var _evt = _options.buttonConfig[_btnText];
							if(_evt){
								_evt(_options.buttonEvt);
							}
						}
					}else{
						msgServ.Msgslide('该操作当前无法执行')
						$(_options.buttonEvt.currentTarget).linkbutton('enable');
					}
				}
			}
		},
		/**
		 * 获取按钮文字
		 * @param _options.evt	按钮事件
		 * @return	按钮显示文字
		 */
		getButtonText:function(_options){
			var e = _options.evt;
			var _text;
			if(e){				
				_text = e.currentTarget.text
				if((_text==null)||($.trim(_text).length<=0)){
					if(e.currentTarget.innerText){						
						_text = e.currentTarget.innerText
					}
					
				}
			}
			return _text;
		}
	};	
	return public_method;
});
